
// 模拟封装 jquery的ajax方法
// type:请求的方式
// url  请求的地址
// data 请求的数据
// async 是否异步
// datatype  接口返回的数据类型
// success    回调函数(提前定义好了请求成功时要执行的内容 (回调函数有一个形式参数接收数据),请求成功时执行)

var $ = {
    get: function (options) {
        var { url, data = "", async = true, datatype = "text", success } = options;
        if (data instanceof Object) {//此方法不准确  可以传入一个对象作为参数=>解析该对象=>参数数据队列
            var list = []
            for (var key in data) {
                var val = data[key]
                var item = key + "=" + val;
                list.push(item)
            }
            // console.log(list);

            var data = list.join("&")
            // console.log(data);
        }
        var xhr = new XMLHttpRequest();
        // data ? url + "?" + data : url  有数据就拼接,否则直接请求
        xhr.open("get", data ? url + "?" + data : url, async)//1
        // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        xhr.send();//1
        xhr.onreadystatechange = function () {
            // console.log("readystatechange", xhr.readyState); //2 3 4
            if (xhr.readyState == 4 && xhr.status == 200) {
                var result = xhr.responseText;
                if (datatype == "json") {
                    result = JSON.parse(result);
                }
                // console.log(result);
                if (success) {
                    success(result);
                }

            }
        }
    },
    post: function (options) {
        var { url, data = "", async = true, datatype = "text", success } = options;
        if (data instanceof Object) {//此方法不准确  可以传入一个对象作为参数=>解析该对象=>参数数据队列
            var list = []
            for (var key in data) {
                var val = data[key]
                var item = key + "=" + val;
                list.push(item)
            }
            // console.log(list);

            var data = list.join("&")
            // console.log(data);
        }
        var xhr = new XMLHttpRequest();
        // data ? url + "?" + data : url  有数据就拼接,否则直接请求
        xhr.open("post", url, async)//1
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        xhr.send(data);//1
        xhr.onreadystatechange = function () {
            // console.log("readystatechange", xhr.readyState); //2 3 4
            if (xhr.readyState == 4 && xhr.status == 200) {
                var result = xhr.responseText;
                if (datatype == "json") {
                    result = JSON.parse(result);
                }
                // console.log(result);
                if (success) {
                    success(result);
                }

            }
        }
    },
    ajax: function (options) {
        var { type = "get", url, data = "", async = true, datatype = "text", success, error } = options;
        try {
            if (Object.prototype.toString.call(data) === '[object Object]') {//此方法不准确  可以传入一个对象作为参数=>解析该对象=>参数数据队列
                var list = []
                for (var key in data) {
                    var val = data[key]
                    var item = key + "=" + val;
                    list.push(item)
                }
                // console.log(list);

                var data = list.join("&")
                // console.log(data);
            }

            var xhr = new XMLHttpRequest();

            if (type.toLowerCase() == "get") {
                // get
                xhr.open("get", data ? url + "?" + data : url, async)//1
                xhr.send();//1
            }
            else if (type.toLowerCase() == "post") {
                // post
                xhr.open("post", url, async)//1
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
                xhr.send(data);//1
            }
            try {
                xhr.onreadystatechange = function () {
                    // console.log("readystatechange", xhr.readyState); //2 3 4
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var result = xhr.responseText;
                        if (datatype == "json") {
                            result = JSON.parse(result);
                        }
                        // console.log(result);
                        if (success) {
                            success(result);
                        }
                    }
                }
            } catch (err) {
                error && error(err)
            }
        } catch (err) {
            error && error(err)
        }
    }
}